<?php
/**
 * Created by PhpStorm.
 * User: dehong
 * Date: 2016/9/2
 * Time: 22:38
 */

/**
 * _remove_Dir() 删除目录
 * @param $dirName string 路径名
 * @return bool
 */
function _remove_Dir($dirName)
{
    if(! is_dir($dirName))
    {
        return false;
    }
    $handle = @opendir($dirName);
    while(($file = @readdir($handle)) !== false)
    {
        if($file != '.' && $file != '..')
        {
            $dir = $dirName . '/' . $file;
            is_dir($dir) ? _remove_Dir($dir) : @unlink($dir);
        }
    }
    closedir($handle);
    return rmdir($dirName) ;
}

function _manage_login(){
    if(!isset($_COOKIE['username']) || !isset($_SESSION['admin'])){
        _alert_back('非法登录！');
    }
}

/**
 * _timed() 延时发帖
 * @param $_now_time
 * @param $_pre_time
 * @param $_second
 */
function _timed($_now_time,$_pre_time,$_second){
    if($_now_time-$_pre_time < $_second){
        _alert_back('请阁下休息一会儿再发帖！');
    }
}

/**
 * _runtime()是用来获取执行耗时的
 * @access public
 * @return float
 */
function _runtime(){
    $_mtime =  explode(' ',microtime());
    return $_mtime[1] + $_mtime[0];
}

/**
 * _alert_back() JS弹窗
 * @access public
 * @param $_info
 * @return void
 */
function _alert_back($_info){
    echo "<script type='text/javascript'>alert('".$_info."');history.back();</script>";
    exit();
}

function _alert_close($_info){
    echo "<script type='text/javascript'>alert('".$_info."');window.close();</script>";
    exit();
}

/**
 * _location() 提示并跳转页面
 * @param string $_info 提示信息
 * @param string $_url 跳转的页面
 */
function _location($_info,$_url){
    if(!empty($_info)) {
        echo "<script type='text/javascript'>alert('" . $_info . "');location.href='$_url';</script>";
        exit();
    }else{
        header('Location:'.$_url);
    }
}

/**
 * _login_status() 登录状态的判断
 */
function _login_status(){
    if(isset($_COOKIE['username'])){
        _alert_back('登录状态下无法进行本操作！');
    }
}

/**
 * _uniqid() 判断唯一标识符是否异常
 * @param string $_mysql_uniqid 数据库的标识符
 * @param string $_cookie_uniqid cookie的标识符
 */
function _uniqid($_mysql_uniqid,$_cookie_uniqid){
    if($_mysql_uniqid != $_cookie_uniqid){
        _alert_back('唯一标识符异常!');
    }
}

/**
 * _thumb() 缩略图
 * @param string $_filename 文件名
 * @para float $_percent 缩略倍数
 */
function _thumb($_filename,$_percent) {
    //生成png标头文件
    header('Content-type: image/png');
    $_n = explode('.',$_filename);
    //获取文件信息，长和高
    list($_width, $_height) = getimagesize($_filename);
    //生成缩微的长和高
    $_new_width = $_width * $_percent;
    $_new_height = $_height * $_percent;
    //创建一个以0.3百分比新长度的画布
    $_new_image = imagecreatetruecolor($_new_width,$_new_height);
    //按照已有的图片创建一个画布
    switch ($_n[1]) {
        case 'jpg' : $_image = imagecreatefromjpeg($_filename);
            break;
        case 'png' : $_image = imagecreatefrompng($_filename);
            break;
        case 'gif' : $_image = imagecreatefrompng($_filename);
            break;
    }
    //将原图采集后重新复制到新图上，就缩略了
    imagecopyresampled($_new_image, $_image, 0, 0, 0, 0, $_new_width,$_new_height, $_width, $_height);
    imagepng($_new_image);
    imagedestroy($_new_image);
    imagedestroy($_image);
}

/**
 * _get_xml() 获取XML文件的标签内容
 * @param $_xmlfile
 */
function _get_xml($_xmlfile){
    if(file_exists($_xmlfile)){
        $_xml = file_get_contents($_xmlfile);
        preg_match_all('/<vip>(.*)<\/vip>/s',$_xml,$_dom);
        foreach($_dom[1] as $_value){
            preg_match_all('/<id>(.*)<\/id>/s',$_value,$_id);
            preg_match_all('/<username>(.*)<\/username>/s',$_value,$_username);
            preg_match_all('/<sex>(.*)<\/sex>/s',$_value,$_sex);
            preg_match_all('/<face>(.*)<\/face>/s',$_value,$_face);
            preg_match_all('/<email>(.*)<\/email>/s',$_value,$_email);
            preg_match_all('/<url>(.*)<\/url>/s',$_value,$_url);

            $_html['id'] = $_id[1][0];
            $_html['username'] = $_username[1][0];
            $_html['sex'] = $_sex[1][0];
            $_html['face'] = $_face[1][0];
            $_html['email'] = $_email[1][0];
            $_html['url'] = $_url[1][0];
        }
    }else{
        echo '文件不存在！';
    }
    return $_html;
}

/**
 * _set_xml() 生成XML
 * @param $_xmlfile
 * @param $_clean
 */
function _set_xml($_xmlfile,$_clean){
    $fp = @fopen('new.xml','w');
    if(!$fp){
        exit('系统错误，文件不存在！');
    }
    flock($fp,LOCK_EX);

    $string = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
    fwrite($fp,$string,strlen($string));
    $string = "<vip>\r\n";
    fwrite($fp,$string,strlen($string));
    $string = "\t<id>{$_clean['id']}</id>\r\n";
    fwrite($fp,$string,strlen($string));
    $string = "\t<username>{$_clean['username']}</username>\r\n";
    fwrite($fp,$string,strlen($string));
    $string = "\t<sex>{$_clean['sex']}</sex>\r\n";
    fwrite($fp,$string,strlen($string));
    $string = "\t<face>{$_clean['face']}</face>\r\n";
    fwrite($fp,$string,strlen($string));
    $string = "\t<email>{$_clean['email']}</email>\r\n";
    fwrite($fp,$string,strlen($string));
    $string = "\t<url>{$_clean['url']}</url>\r\n";
    fwrite($fp,$string,strlen($string));
    $string = "</vip>";
    fwrite($fp,$string,strlen($string));

    flock($fp,LOCK_UN);
    fclose($fp);
}

function _ubb($_string){
    $_string = nl2br($_string);
    $_string = preg_replace('/\[size=(.*)\](.*)\[\/size\]/U','<span style="font-size:\1px">\2</span>',$_string);
    $_string = preg_replace('/\[b\](.*)\[\/b\]/U','<strong>\1</strong>',$_string);
    $_string = preg_replace('/\[i\](.*)\[\/i\]/U','<em>\1</em>',$_string);
    $_string = preg_replace('/\[u\](.*)\[\/u\]/U','<span style="text-decoration:underline">\1</span>',$_string);
    $_string = preg_replace('/\[s\](.*)\[\/s\]/U','<span style="text-decoration:line-through">\1</span>',$_string);
    $_string = preg_replace('/\[color=(.*)\](.*)\[\/color\]/U','<span style="color:\1">\2</span>',$_string);
    $_string = preg_replace('/\[url\](.*)\[\/url\]/U','<a href="\1" target="_blank">\1</a>',$_string);
    $_string = preg_replace('/\[email\](.*)\[\/email\]/U','<a href="mailto:\1">\1</a>',$_string);
    $_string = preg_replace('/\[img\](.*)\[\/img\]/U','<img src="\1" alt="图片" />',$_string);
    $_string = preg_replace('/\[flash\](.*)\[\/flash\]/U','<embed style="width:480px;height:400px;" src="\1" />',$_string);
    return $_string;
}

/**
 * _title() 标题截取函数
 * @param $_string
 * @return string
 */
function _title($_string,$_strlen){
    if(mb_strlen($_string,'utf-8') > $_strlen){
        $_string = mb_substr($_string,0,$_strlen,'utf-8').'...';
    }
    return $_string;
}

/**
 * _html() 对字符串进行HTML过滤
 * @param array|string $_string 进行过滤的数组或者字符串
 * @return array|string 返回过滤后的数组或者字符串
 */
function _html($_string){
    if(is_array($_string)){
        foreach($_string as $_key => $_value){
            $_string[$_key] = _html($_value); // 递归
        }
    }else{
        $_string = htmlspecialchars($_string);
    }
    return $_string;
}

/**
 * _mysql_string() 对提交到数据库的信息转义
 * @param string $_info 提交的信息
 * @return array|string 返回转义后的信息
 */
function _mysql_string($_info){
    if(is_array($_info)){
        foreach($_info as $_key => $_value){
            $_info[$_key] = addslashes($_value);
        }
    }else{
        $_info = addslashes($_info);
    }
    return $_info;
}

/**
 * _page() 分页的页数和显示的条数
 * @param string $_sql SQL语句
 * @param int $_size 显示的条数
 */
function _page($_sql,$_size){
    // 将里面的所有值全部取出来，可以外部调用
    global $_page,$_pagesize,$_pagenum,$_pageabsolute,$_num;
    @$_page = $_GET['page'];
    if(empty($_page) || $_page <= 0 || !is_numeric($_page)){
        $_page = 1;
    }else{
        $_page = intval($_page);
    }
    $_pagesize = $_size;
    // 首页要得到所有的数据总和
    $_num =  _fetch_array_list($_sql)->rowCount();
    if($_num == 0){
        $_pageabsolute = 1;
    }else{
        $_pageabsolute = ceil($_num/$_pagesize);
    }
    if($_page > $_pageabsolute){
        $_page = $_pageabsolute;
    }
    $_pagenum = $_page?(($_page - 1) * $_pagesize):1;
}

/**
 * _paging() 分页
 * @access public
 * @param int $_type 1表示数字分页，2表示文本分页
 * @return 返回分页
 */
function _paging($_type){
    global $_page,$_pageabsolute,$_num,$_id;
    if($_type == 1){
        echo '<div id="page_num">';
        echo '<ul>';
        for($i=0; $i<$_pageabsolute; $i++){
            if($_page == ($i+1)){
                echo '<li><a href="'.SCRIPT.'.php?'.$_id.'page='.($i+1).'" class="selected">'.($i+1).'</a></li>';
            }else{
                echo '<li><a href="'.SCRIPT.'.php?'.$_id.'page='.($i+1).'">'.($i+1).'</a></li>';
            }
        }
        echo '</ul>';
        echo '</div>';
    }elseif($_type == 2){
        echo '<div id="page_text">';
        echo '<ul>';
        echo "<li>$_page/$_pageabsolute | </li>";
            echo "<li>共有<strong>$_num</strong>条数据 | </li>";
            if($_page == 1){
                echo "<li>首页 |</li>";
                echo "<li> 上一页 |</li>";
            }else{
                echo '<li><a href="'.SCRIPT.'.php">首页</a> |</li>';
                echo '<li> <a href="'.SCRIPT.'.php?'.$_id.'page='.($_page-1).'">上一页</a> |</li>';
            }
            if($_page == $_pageabsolute){
                echo "<li>下一页 |</li>";
                echo "<li>尾页</li>";
            }else{
                echo '<li> <a href="'.SCRIPT.'.php?'.$_id.'page='.($_page+1).'">下一页</a> |</li>';
                echo '<li> <a href="'.SCRIPT.'.php?'.$_id.'page='.$_pageabsolute.'">尾页</a></li>';
            }
        echo '</ul>';
        echo '</div>';
    }else{
        _paging(2);
    }
}

/**
 * _session_destory() 销毁一个会话中的全部数据
 */
function _session_destory(){
    if(!!session_start()){
        session_destroy();
    }
}

/**
 * _unsetcookies() 删除cookies
 */
function _unsetcookies(){
    setcookie('username','',time()-3600);
    setcookie('uniqid','',time()-3600);
    _session_destory();
    _location(null,'index.php');
}

/**
 * _sha1_uniqid() 生成一个唯一标识符并返回
 * @return string
 */
function _sha1_uniqid(){
    return sha1(uniqid(rand(),true));
}

/**
 * _check_code() 检测验证码是否正确
 * @param string $_first_code
 * @param string $_end_code
 */
function _check_code($_first_code,$_end_code){
    if($_first_code != $_end_code){
        _alert_back('验证码不正确！');
    }
}

/**
 * code()验证码函数
 * @param int $_width 长度
 * @param int $_height 宽度
 * @param int $_rnd_code 位数
 * @param bool $_flag 是否要边框，true有边框，false无边框
 * @return void 调用此函数产生一个验证码
 */
function _code($_width = 75,$_height = 25,$_rnd_code = 4,$_flag = false){

    // 创建随机码
    $_nmsg = null;
    for ($i=0;$i<$_rnd_code;$i++) {
        $_nmsg.=dechex(mt_rand(0,15));
    }
    $_SESSION['code'] = $_nmsg;
    $im = imagecreatetruecolor($_width,$_height);

    $white = imagecolorallocate($im,255,255,255);
    // 填充
    imagefill($im,0,0,$white);
    // 随机产生6条线
    for ($i=0;$i<6;$i++) {
        $_rnd_color = imagecolorallocate($im,mt_rand(180,255),mt_rand(180,255),mt_rand(180,255));
        imageline($im,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color);
    }

    // 随机雪花
    for ($i=0;$i<44;$i++) {
        $_rnd_color = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
        imagechar($im,1,mt_rand(0,$_width),mt_rand(0,$_height),'*',$_rnd_color);
    }

    // 黑色,边框
    if ($_flag) {
        $black = imagecolorallocate($im,0,0,0);
        imagerectangle($im,0,0,$_width-1,$_height-1,$black);
    }

    // 输出验证码
    for ($i=0; $i<strlen($_SESSION['code']); $i++) {
        $_rnd_color = imagecolorallocate($im,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));
        imagestring($im,5,$i*$_width/$_rnd_code+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);
    }

    // 输出图像
    header('Content-Type:image/png');
    imagepng($im);
    imagedestroy($im);
}